package com.hspedu.static_;

/**
 * @Author Stringzhua
 * @Date 2024/3/4 19:41
 * description:
 * 1.什么时候使用类变量
 * 当需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量
 * 例如:定义学生类,统计所有学生交多少钱.
 * Student(name,static fee)
 * 2.类变量与实例变量(普通属性)的区别
 * 类变量是该类的所有对象共享的,而实例变量是每个对象独享的
 * 3.加上static称为类变量或静态变量,否则称为实例变量/普通变量/非静态变量
 * 4.类变量可以通过
 * 类名.类变量名
 * 或者
 * 对象名.类变量名 来访问,
 * 但java设计者推荐我们使用 类名.类变量名方式访问【前提是 满足访问修饰符的访问权限和范围】
 * 5.实例变量不能通过 类名.类变量名 方式来访问
 * 6.类变量是在类加载时就初始化了,也就是说,即使你没有创建对象,只要类加载了,就可以使用类变量了
 * 7.类变量的生命周期是随类的加载开始,随着类消亡而销毁【举例,Monster.name】
 */
public class StaticDetail {
    public static void main(String[] args) {
        B b = new B();
        //5.实例变量不能通过 类名.类变量名 方式来访问
//        System.out.println("B.n1 = " + B.n1);//Non-static field 'n1' cannot be referenced from a static context
        System.out.println("b.n2 = " + b.n2);

        //静态变量是类加载的时候,就创建了,所以我们没有创建对象实例
        //也可以通过类名.类变量名来访问
        System.out.println(C.address);

//         7.类变量的生命周期是随类的加载开始,随着类消亡而销毁【举例,Monster.name】
        System.out.println(Monster.name);
    }
}

class B {
    public int n1 = 100;

    public static int n2 = 200;
}

class C {
    public static String address = "北京";
}

class Monster {
    // 7.类变量的生命周期是随类的加载开始,随着类消亡而销毁【举例,Monster.name】
    public static String name = "哥斯拉";
}